<?php

/**
 * 数据库操作类，数据库操作的中间层
 * @version V1.0
 * @copyright (c) 2013-03, 崔俊涛
 */
class PhpMysql {

    //数据库连接句柄
    private $conn;
    private $current;

    function __construct() {
        global $db_config;
        $this->conn = new DbYspMysqlPdo($db_config);
        $this->current = isset($_GET['current']) ? intval($_GET['current']) : 0;
        //$this->current 删某一条记录的id ,intval转化为十进制
    }

    /**
     * 当前页面运行的所有SQL语句
     */
    function printSql() {
        foreach ($this->conn->sqls as $key => $sql) {
            echo "<p>[" . ($key + 1) . "] -- {$sql}</p>";
        }
    }

    /**
     * 执行一条完整的SQL语句
     * @param string $sql 一条完整的SQL语句
     * @return resource 返回资源
     */
    function querySql($sql) {
        return $this->conn->querySql($sql);
    }

    /**
     * 取总记录条数
     * @param string $table_name 表名
     * @param string $where 条件
     * @return array 返回一个元素的一维数组
     */
    function getTotal($table_name, $where = '') {
        $rs = $this->conn->getOneSelect($table_name, 'COUNT(1) as totals', $where);
        return $rs['totals'];
    }

    /**
     * 执行SELECT语句
     * @param string $table_name 表名
     * @param array $field_str 字段列表，用逗号分隔
     * @param string $where 查询条件
     * @param string $limit 限制行数
     * @param string $ordery_by 排序方式
     * @param string $group_by 分组方式
     * @return array 返回为数组的结果
     */
    function getList($table_name, $field_str = '*', $where = '', $ordery_by = '', $limit = '', $group_by = '', $haveing = '') {
        return $this->conn->getMoreSelect($table_name, $field_str, $where, $ordery_by, $limit, $group_by, $haveing);
    }

    /**
     * 只取一行记录
     * @param string $table_name 表名
     * @param string $field_str 字段列表，中间用逗号分隔
     * @param string $where WHERE条件，写的时候带WHERE
     * @param string $ordery_by 排序
     * @param string $group_by 分组
     * @param string $having having统计条件
     * @return resources|boolean 返回数组或者布尔值
     */
    function getOneRow($table_name, $field_str = '*', $where = '', $ordery_by = '') {
        return $this->conn->getOneSelect($table_name, $field_str, $where, $ordery_by);
    }

    /**
     * 根据ID只取一行记录
     * @param string $table_name 表名
     * @param string $field_str 字段列表，中间用逗号分隔
     * @param string $where WHERE条件，写的时候带WHERE
     * @param string $limit LIMIT限制条件
     * @param string $ordery_by 排序
     * @param string $group_by 分组
     * @param string $having having统计条件
     * @return resources|boolean 返回数组或者布尔值
     */
    function View($table_name, $id_name) {
        return $this->conn->getOneSelect($table_name, '*', "WHERE $id_name=" . $this->current);
    }

    /**
     * 执行UPDATE SQL语句
     * @param string $table_name 表名
     * @param array $field_array 字段一维数组
     * @param string $where WHERE条件
     * @return object 返回一个结果对象
     */
    function Edit($table_name, $field_array, $id_name, $num_no_strong = array(0)) {
        return $this->conn->sqlUpdate($table_name, $field_array, "WHERE $id_name=" . $this->current, $num_no_strong);
    }

    /**
     * 执行INSERT SQL语句
     * @param string $table_name 表名
     * @param array $field_array 字段一维数组
     * @return integer 整数
     */
    function Add($table_name, $field_array) {
        return $this->conn->queryInsert($table_name, $field_array);
    }

    /**
     * 删除操作
     * @param string $table_name 表名
     * @param string $where 条件
     * @param string $limit 限制行数
     * @param string $order_by 排序方法
     * @param string $group_by  分组方式
     * @param string $having 条件
     * @return object 返回结果
     */
    function Del($table_name, $id_name) {
        return $this->conn->sqlDelete($table_name, "WHERE $id_name=" . $this->current);
    }

    /**
     * 按指定的条件删除记录
     * @param string $table_name 表名
     * @param string $where 条件
     * @return bealoon 成功返加true，失败返回false
     */
    function delMore($table_name, $where) {
        return $this->conn->sqlDelete($table_name, $where);
    }

    //按条件修改一条指定的记录
    function Update($table_name, $field_array, $where, $num_no_strong = array(0)) {
        return $this->conn->sqlUpdate($table_name, $field_array, $where, $num_no_strong);
    }

    /**
     * 执行INSERT SQL语句，如果存在则不重复添加
     * @param string $table_name 表名
     * @param array $field_array 字段一维数组
     * @return integer 整数
     */
    function addIgnore($table_name, $field_array) {
        return $this->conn->queryInsertIgnore($table_name, $field_array);
    }

    /**
     * 执行插入替换语句，如果存在就先删除再插入新的。
     * @param string $table_name 表名
     * @param array $field_array 字段一维数组
     * @return integer 整数
     */
    function addReplace($table_name, $field_array) {
        return $this->conn->queryReplace($table_name, $field_array);
    }

}
